利用collapse命令转化原始数据
本文作者:王 歌
文字编辑:王碧琪
技术总编:李朋冲
在进行数据分析时,经常会使用到一些基本的描述统计量,如均值、分位数、最值等。通常我们可以利用summarize命令来生成这些统计量的值,使用该命令时也会生成包含均值、方差等多个描述统计值的表格,并将结果存储在返回值中。如果要生成多个变量的多个统计值并存储于数据集中,或需要分类生成某个描述统计量时,使用summarize命令产生的表格也不便于整合,返回值可能会“打架”。此时,我们可以考虑使用collapse命令来达到目的,下面我们就来学习一下如何使用这个命令。
一、命令介绍
collapse是Stata的内部命令,无需安装,其基本的语法结构如下:
collapse clist [if] [in] [weight] [, options]
(1)clist可以是
[(stat)] varlist [ [(stat)] ... ]
也可以是
[(stat)] target_var=varname [target_var=varname ...] [ [(stat)] ...]
其中的stat为需要生成的统计量名称,collapse可以生成的统计量包括均值(mean)、标准差(sd)、最大值(max)、最小值(min)以及1-100分位数(p1,p2,…,p50或者median,…,p99,percent)等等。第二种形式的clist可以将生成的统计量命名为target_var。
(2)可选的options主要有两个:by(varname)用来按某变量分类计算统计量的值,cw用于删除含有缺失值的观测值。
二、示例
通过上面的介绍,我们已经基本了解了collapse命令的语法结构,下面通过例子来看看在具体数据中如何使用它。此处我们以Stata官网上的college数据为例,首先来看一下这个数据。
webuse college , clear
list
可以看到,四个变量均为数值型变量,year表示年级,number表示学生人数。若要计算各年级gpa的均值,并将得到的均值存储在变量gpa中,可使用collapse命令:
collapse (mean) gpa , by(year) //求gpa的均值,未考虑数量权重
list
得到的均值储存在变量gpa中,运行结果如下:
此时内存中的原始数据不复存在,得到的这个新数据替换了原始数据储存在内存中。如果想要将所求得的均值起一个新名字mean_gpa,可以使用我们在前面介绍的第二种语法结构,程序如下:
webuse college, clear //此时要重新读入数据
collapse (mean) mean_gpa=gpa, by(year)
list
程序运行结果如下:
所得的结果中除变量名称改变外,数值结果与前面一致。
在上面程序里,求各年级gpa均值时,并未考虑权重。不考虑数量,所求均值容易受到极端值影响。因此,我们加上权重再来求均值。
进行加权计算时,可以在变量名后加入权重。collapse命令支持Stata中的所有权重类型,默认情况下为aweight,此处使用fweight=number作为权重计算gpa的均值,程序如下:
webuse college, clear
collapse (mean) gpa [fw=number], by(year)
list
运行结果如下:
若对各年级的gpa和hour分别计算均值和最小值,并将最小值分别存储在变量min_gpa和min_hour中(未加权重),程序如下:
webuse college, clear
collapse (mean) gpa hour (min) min_gpa = gpa min_hour =hour, by(year)
list
类似地,我们也可以计算多个变量的多个描述统计量的值。
当变量中存在缺失值时,使用cw选项会将存在缺失值的该行观测值全部删除,因此得到的统计量的值均为删除这些行以后计算得到的;若不使用该选项,则只影响含有缺失值的变量的统计量。仍以college数据为例,我们将2-4行的gpa数据替换为缺失值:
webuse college, clear
replace gpa= . in 2/4
list in 1/5
更改后数据集的1-5行如下:
而后对gpa和hour按年级求均值,首先来看一下不使用cw选项时的结果,程序如下:
collapse (mean) gpa hour , by(year)
list
对比前面没有缺失值时所得的均值,由于2-4行均属于一年级,因而在以年级分类计算均值时,只有一年级的gpa受到了影响,hour的均值与前面一致。如果使用cw选项:
webuse college, clear
replace gpa= . in 2/4
collapse (mean) gpa hour, by(year) cw
list
使用cw后,由于一年级的数据只剩下第一行,其余行全部删掉,因而一年级的hour变量的均值也发生了变化,在计算时只对原数据的第一行进行了平均。
利用collapse命令可以将原始数据集转化为我们感兴趣的某个或某些描述统计量的值组成的数据集,但要注意的是,在得到新的数据以后,原始数据将不再保存在内存中,因此使用前要注意保存原始数据;也可以将数据集存储在不同的frame之中,再做后续处理。以上就是我们今天的介绍,大家快去动手操作一下吧~
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。